package beans;

import entidades.UnidadeMilitar;
import entidades.Usuario;
import excessoes.DAOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import rn.UnidadeMilitarRN;
import util.ContextoUtil;
import entidades.Setor;


/**
 *
 * @author Marcelo Gomes Neto
 */
@ManagedBean(name="unidadeMilitarBean")
@RequestScoped
public class UnidadeMilitarBean implements Serializable 
{
    private static final long serialVersionUID = 3324670624935153798L;
    private UnidadeMilitar unidadeMilitar = new UnidadeMilitar();
    private Set<Setor> setorSet = new HashSet<>();
    private Setor setor = new Setor();
    private ContextoBean contextoBean = ContextoUtil.getContextoBean();
    //private Usuario usuario = contextoBean.getUsuarioLogado();
    private List<UnidadeMilitar> listar;
    private SortedMap<String, Integer> listarTipos = new TreeMap<>(); //cria um mapa ordenado com treemap
    
    public void prepararAdicionarUnidadeMilitar(ActionEvent actionEvent) {
        this.unidadeMilitar = new UnidadeMilitar();
        this.setor = new Setor(); // ou this.setorSet = new HashSet<>();
    }
    
    public String salvar() throws DAOException, Exception 
    {
        Usuario usuario = contextoBean.getUsuarioLogado();
        UnidadeMilitarRN unidadeMilitarRN = new UnidadeMilitarRN();
        this.unidadeMilitar.getSetor().add(this.setor);
        unidadeMilitarRN.salvarUnidadeMilitar(this.unidadeMilitar, usuario);
        this.setListar(unidadeMilitarRN.listarUnidadeMilitar());
        this.unidadeMilitar = new UnidadeMilitar();
        this.setor = new Setor(); // ou this.setorSet = new HashSet<>();
        return null;
    }
        
    public String excluir() throws Exception
    {
        Usuario usuario = contextoBean.getUsuarioLogado();
        UnidadeMilitarRN unidadeMilitarRN = new UnidadeMilitarRN();
        unidadeMilitarRN.excluirUnidadeMilitar(this.unidadeMilitar, usuario);
        this.setListar(unidadeMilitarRN.listarUnidadeMilitar());
        this.unidadeMilitar = new UnidadeMilitar();
        this.setor = new Setor(); // ou this.setorSet = new HashSet<>();
        return null;
    }

    public List<UnidadeMilitar> getListar() 
    {
        if(this.listar == null)
        {
            UnidadeMilitarRN unidadeMilitarRN = new UnidadeMilitarRN();
            this.setListar(unidadeMilitarRN.listarUnidadeMilitar());
        }
        return this.listar;
    }

    public void setListar(List<UnidadeMilitar> listar) {
        this.listar = listar;
    }

    public List<SelectItem> getListarDescricao() 
    {
        List<SelectItem> descricoes = new ArrayList<>();
        UnidadeMilitarRN UnidadeMilitarRN = new UnidadeMilitarRN();
        List<UnidadeMilitar> resultado = UnidadeMilitarRN.listarUnidadeMilitarDescricao();
        for (UnidadeMilitar nome : resultado) {
            SelectItem item = new SelectItem(nome.getDescricao());
            descricoes.add(item);
        }
        return descricoes;
    }
    
    public Set<Entry<String, Integer>> getListarTipos() 
    {
        UnidadeMilitarRN UnidadeMilitarRN = new UnidadeMilitarRN();
        this.listar = UnidadeMilitarRN.listarUnidadeMilitar();
        for (int i=0; i < listar.size(); i++)
        {
            Integer id = this.listar.get(i).getIdunidade();
            String sigla = this.listar.get(i).getSiglaOM();
            this.listarTipos.put(sigla, id);
        }
        return this.listarTipos.entrySet();
    }
    
    /*
    public SortedMap<Integer, String> getListarTipos2() 
    {
        TipoRevisaoRN tipoRevisaoRN = new TipoRevisaoRN();
        this.listar = tipoRevisaoRN.listarTipoRevisao();
        for (int i=0; i<listar.size();i++)
        {
            Integer id = this.listar.get(i).getIdTipoRevisao();
            String descricao = this.listar.get(i).getDescricao();
            this.listarTipos.put(id, descricao);
        }
        return this.listarTipos;
    }
    */
    public void setListarTipos(SortedMap<String, Integer> listarTipos) {
        this.listarTipos = listarTipos;
    }

    public UnidadeMilitar getUnidadeMilitar() {
        return unidadeMilitar;
    }

    public void setUnidadeMilitar(UnidadeMilitar unidadeMilitar) {
        this.unidadeMilitar = unidadeMilitar;
    }

    public Set<Setor> getSetorSet() {
        return setorSet;
    }

    public void setSetorSet(Set<Setor> setorSet) {
        this.setorSet = setorSet;
    }

    public Setor getSetor() {
        return setor;
    }

    public void setSetor(Setor setor) {
        this.setor = setor;
    }
}